/**
 * Copyright (c) 2006-2015, JGraph Ltd
 * Copyright (c) 2006-2015, Gaudenz Alder
 */
var mxObjectIdentity =
{
  /**
	 * Class: mxObjectIdentity
	 *
	 * Identity for JavaScript objects and functions. This is implemented using
	 * a simple incrementing counter which is stored in each object under
	 * <FIELD_NAME>.
	 *
	 * The identity for an object does not change during its lifecycle.
	 *
	 * Variable: FIELD_NAME
	 *
	 * Name of the field to be used to store the object ID. Default is
	 * <code>mxObjectId</code>.
	 */
  FIELD_NAME: 'mxObjectId',

  /**
	 * Variable: counter
	 *
	 * Current counter.
	 */
  counter: 0,

  /**
	 * Function: get
	 *
	 * Returns the ID for the given object or function or null if no object
	 * is specified.
	 */
  get: function (obj) {
    if (obj != null) {
      if (obj[mxObjectIdentity.FIELD_NAME] == null) {
        if (typeof obj === 'object') {
          var ctor = mxUtils.getFunctionName(obj.constructor)
          obj[mxObjectIdentity.FIELD_NAME] = ctor + '#' + mxObjectIdentity.counter++
        } else if (typeof obj === 'function') {
          obj[mxObjectIdentity.FIELD_NAME] = 'Function#' + mxObjectIdentity.counter++
        }
      }

      return obj[mxObjectIdentity.FIELD_NAME]
    }

    return null
  },

  /**
	 * Function: clear
	 *
	 * Deletes the ID from the given object or function.
	 */
  clear: function (obj) {
    if (typeof (obj) === 'object' || typeof obj === 'function') {
      delete obj[mxObjectIdentity.FIELD_NAME]
    }
  }

}
